home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
intuisup.lha
/
Intuisup
/
source.lha
/
Editor
/
save.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-05
|
9KB
|
382 lines
/* $Revision Header *** Header built automatically - do not edit! ***********
*
* (C) Copyright 1991 by Torsten Jürgeleit
*
* Name .....: save.c
* Created ..: Sunday 22-Dec-91 21:23:04
* Revision .: 2
*
* Date Author Comment
* ========= ==================== ====================
* 02-Oct-92 Michael Bjerking New realese, better Screen/Window editor
* 31-Dec-91 Torsten Jürgeleit new font management
* 22-Dec-91 Torsten Jürgeleit Created this file!
*
****************************************************************************
*
* Save ISUP files
*
* $Revision Header ********************************************************/
/* Includes */
#include "includes.h"
#include "defines.h"
#include "imports.h"
#include "protos.h"
/* Save project */
SHORT
save_project(VOID)
{
struct rtFileRequester *freq = project_file_requester;
SHORT status = EDITOR_STATUS_NORMAL;
BYTE filename[256], buf[256]; /* <- should define a constant */
/* Display ReqTools file requester and check if user selected cancel */
IChangeMousePointer(ewin, NULL, FALSE);
if (rtFileRequest(freq, filename, PROJECT_SAVE_HAIL_TEXT, TAG_END))
{
struct TemplateList *tl = &template_list;
FILE *fh; /* BPTR fh; */
SHORT len = strlen(filename) - 4;
/* Prepare file name and project name */
if (len < 1 || strcmp(filename + len, ".tpl"))
{
strcat(filename, ".tpl");
len += 4;
}
/* filename = path + name */
if (strlen(freq->Dir) > 0)
{
strcpy(buf, filename);
if (strncmp(buf + strlen(buf) - 1, ":", (size_t) 1) == 0)
sprintf(filename, "%s/%s", freq->Dir, buf);
else
sprintf(filename, "%s%s", freq->Dir, buf);
}
change_project_name(tl, filename, len);
/* Check if file already exists and inform user */
if (fh = fopen(filename, "r"))
fclose(fh);
if (!fh || ok_cancel_requester(" Save ", "File already exists.\\n\\n"
"Do you really want to overwrite?") == TRUE)
{
/* Open file and write project data */
if (!(fh = fopen(filename, "w+")))
{
status = EDITOR_ERROR_OPEN_FAILED;
}
else
{
if ((status = write_project_header(fh, tl)) ==
EDITOR_STATUS_NORMAL)
{
if ((status = write_project_fonts(fh, tl)) ==
EDITOR_STATUS_NORMAL)
{
status = write_project_templates(fh, tl);
}
}
fclose(fh);
/* If any error then delete incomplete project file */
if (status != EDITOR_STATUS_NORMAL)
{
DeleteFile(filename);
}
else
{
tl->tl_Flags &= ~TEMPLATE_LIST_FLAG_CHANGED;
}
}
}
}
IRestoreMousePointer(ewin);
if (status != EDITOR_STATUS_NORMAL)
{
show_error(status);
}
return (status);
}
/* Write project header to save file */
STATIC SHORT
write_project_header(FILE * fh, struct TemplateList * tl)
{
SHORT status;
if (fprintf(fh,
"\n\t/* Project: %s */\n\n"
"BEGIN PROJECTHEADER\n"
" LEFTEDGE=%d\n"
" TOPEDGE=%d\n"
" WIDTH=%d\n"
" HEIGHT=%d\n"
" MINW=%d\n"
" MINH=%d\n"
" MAXW=%d\n"
" MAXH=%d\n"
" DETAILPEN=%d\n"
" BLOCKPEN=%d\n"
" FLAGS=%d\n"
" WINFLAGS=%d\n"
" IDCMPFLAGS=%d\n"
" ID=\"%s\"\n"
" NAME=\"%s\"\n"
"END PROJECTHEADER\n",
&tl->tl_ProjectName[0],
pwin->LeftEdge,
pwin->TopEdge,
pwin->Width,
pwin->Height,
pwin->MinWidth,
pwin->MinHeight,
pwin->MaxWidth,
pwin->MaxHeight,
pwin->DetailPen,
pwin->BlockPen,
tl->tl_Flags,
pwin->Flags,
tl->tl_IDCMPFlags,
&tl->tl_ProjectID[0],
&tl->tl_ProjectWinName[0]) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
else
status = EDITOR_STATUS_NORMAL;
return (status);
}
/* Write all template fonts to save file */
STATIC SHORT
write_project_fonts(FILE * fh, struct TemplateList * tl)
{
struct TemplateFont *tf;
USHORT count = 0;
SHORT status = EDITOR_STATUS_NORMAL;
for (count = 0, tf = get_head((struct List *) & tl->tl_Fonts);
tf && status == EDITOR_STATUS_NORMAL; count++,
tf = get_succ((struct Node *) & tf->tf_MinNode))
{
struct TextAttr *ta = &tf->tf_TextAttr;
if (fprintf(fh, "\n\t/* Font %d */\n\n"
"BEGIN FONT\n"
" NAME=\"%s\"\n"
" YSIZE=%d\n"
"END FONT\n", count, ta->ta_Name, ta->ta_YSize) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
}
return (status);
}
/* Write all templates to save file */
STATIC SHORT
write_project_templates(FILE * fh, struct TemplateList * tl)
{
struct Template *tp;
UBYTE count;
SHORT status = EDITOR_STATUS_NORMAL;
for (count = 0, tp = get_head((struct List *) & tl->tl_Templates);
tp && status == EDITOR_STATUS_NORMAL;
count++, tp = get_succ(&tp->tp_Node))
{
struct Box *box = &tp->tp_Box;
UBYTE type = tp->tp_Type;
/* Write standard data */
if (fprintf(fh, "\n\t/* Template %d: %s */\n\n"
"BEGIN TEMPLATE\n"
" NAME=\"%s\"\n"
" TYPE=%d\n"
" FLAGS=%d\n"
" BEGIN BOX\n"
" X1=%d\n"
" Y1=%d\n"
" X2=%d\n"
" Y2=%d\n"
" END BOX\n", count, template_type_text_array[type],
&tp->tp_TemplateName[0], type, tp->tp_Flags, box->bo_X1,
box->bo_Y1, box->bo_X2, box->bo_Y2) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
else
{
/* Write text list if any */
if (type == TEMPLATE_TYPE_MX || type == TEMPLATE_TYPE_CYCLE ||
type == TEMPLATE_TYPE_LISTVIEW)
{
if (fprintf(fh, " BEGIN TEXTLIST\n") == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
else
{
struct Node *node;
for (node = get_head(&tp->tp_TextList); node &&
status == EDITOR_STATUS_NORMAL; node = get_succ(node))
{
if (fprintf(fh, " TEXT=\"%s\"\n",
node->ln_Name) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
}
if (status == EDITOR_STATUS_NORMAL)
{
if (fprintf(fh, " END TEXTLIST\n") == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
}
}
}
/* Write template data */
if (status == EDITOR_STATUS_NORMAL)
{
struct BorderData *bd;
struct TextData *td;
struct GadgetData *gd;
BYTE *fmt;
switch (TEMPLATE_GROUP(tp))
{
case TEMPLATE_GROUP_BORDER:
/* Write border data */
bd = &tp->tp_Data.tp_BorderData;
if (fprintf(fh,
" BEGIN BORDERDATA\n"
" TYPE=%d\n"
" END BORDERDATA\n", bd->bd_Type) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
break;
case TEMPLATE_GROUP_TEXT:
/* Write text data */
td = &tp->tp_Data.tp_TextData;
if (td->td_Type == TEXT_DATA_TYPE_TEXT)
{
fmt = " BEGIN TEXTDATA\n"
" TYPE=%d\n"
" FLAGS=%d\n"
" TEXT=\"%s\"\n"
" TEXTATTR=%d\n"
" END TEXTDATA\n";
}
else
{
fmt = " BEGIN TEXTDATA\n"
" TYPE=%d\n"
" FLAGS=%d\n"
" TEXT=%ld\n"
" TEXTATTR=%d\n"
" END TEXTDATA\n";
}
if (fprintf(fh, fmt, td->td_Type, td->td_Flags,
td->td_Text, get_template_font_num(tl,
td->td_TextAttr)) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
break;
case TEMPLATE_GROUP_GADGET:
/* Write gadget data */
gd = &tp->tp_Data.tp_GadgetData;
if (fprintf(fh,
" BEGIN GADGETDATA\n"
" TYPE=%ld\n"
" FLAGS=%ld\n", gd->gd_Type,
gd->gd_Flags) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
else
{
if (!gd->gd_Text)
{
fmt = " TEXT=%ld\n";
}
else
{
fmt = " TEXT=\"%s\"\n";
}
if (fprintf(fh, fmt, gd->gd_Text) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
else
{
if (gd->gd_Type == GADGET_DATA_TYPE_STRING)
{
fmt = " TEXTATTR=%d\n"
" SPECIAL1=%ld\n"
" SPECIAL2=%ld\n"
" SPECIAL3=\"%s\"\n";
}
else
{
fmt = " TEXTATTR=%d\n"
" SPECIAL1=%ld\n"
" SPECIAL2=%ld\n"
" SPECIAL3=%ld\n";
}
if (fprintf(fh, fmt, get_template_font_num(tl,
gd->gd_TextAttr),
gd->gd_SpecialData.gd_Data.gd_Data1,
gd->gd_SpecialData.gd_Data.gd_Data2,
gd->gd_SpecialData.gd_Data.gd_Data3) == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
else
{
if (fprintf(fh, " END GADGETDATA\n") == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
}
}
}
break;
}
}
if (status == EDITOR_STATUS_NORMAL)
{
if (fprintf(fh, "END TEMPLATE\n") == -1L)
{
status = EDITOR_ERROR_WRITE_FAILED;
}
}
}
}
return (status);
}